로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
04 요청(Request) 및 응답(Response) 본문 처리 | ✅ 편저: 코담 운영자
4강: FastAPI 요청(Request) 및 응답(Response) 본문 처리
🔗 소스
📦 요청/응답 본문이란?
- 요청 본문(Request Body): 클라이언트가 서버로 전송하는 데이터 (예: 게시글 내용, 사용자 정보)
- 응답 본문(Response Body): 서버가 클라이언트에 반환하는 데이터 (예: 처리 결과, 저장된 객체 정보)
✅ 예시 상황
- 사용자가 게시글을 작성할 때 → 글 내용과 이미지를 서버에 전송 (Request Body)
- 서버는 저장 후 → 성공 메시지와 글 정보를 반환 (Response Body)
🧱 Pydantic 모델로 요청 본문 정의
FastAPI에서는 Pydantic 모델을 통해 JSON 형식의 요청 데이터를 구조화하고 자동 검증할 수 있습니다.
📌 예제 1: 요청 바디 받기
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.post("/users")
def create_user(user: User):
return user
/users
에 POST 요청 시 JSON 데이터를User
모델로 검증- 예시 요청 데이터:
{
"name": "John",
"age": 18
}
- 유효성 검사 실패 시 422 오류와 상세 메시지 반환
📤 응답 본문 정의
응답도 Pydantic 모델로 명시하면 API의 응답 포맷을 일관되게 유지할 수 있습니다.
📌 예제 2: 응답 바디 지정
@app.get("/users/{user_id}", response_model=User)
def get_user(user_id: int):
return {"name": "Jane", "age": 25}
response_model=User
→ 반환값이User
모델을 따라야 함- FastAPI가 반환값을 검증하여 자동 필터링, 검증 수행
🔍 유효성 검사와 제약 조건 추가
Pydantic은 데이터의 정확성과 제약 조건을 손쉽게 설정할 수 있습니다.
📌 예제 3: 커스텀 유효성 검사
from pydantic import BaseModel, Field, validator
class User(BaseModel):
name: str = Field(..., min_length=1)
age: int = Field(..., gt=0, le=120)
@validator("name")
def name_must_not_be_empty(cls, v):
if not v.strip():
raise ValueError("Name cannot be empty")
return v
Field()
를 이용해age
의 범위 제약 설정@validator
를 통해 공백 이름 허용 방지
🚫 GET 요청에는 Body 사용 비권장
GET
요청에 본문 데이터 사용은 HTTP 사양상 비표준이며, FastAPI에서는 가능하나 권장되지 않음- 데이터 전송에는
POST
,PUT
,DELETE
,PATCH
등을 사용하세요
✅ 요약
- 요청(Request) 본문 → 클라이언트에서 서버로 보내는 데이터
- 응답(Response) 본문 → 서버가 클라이언트에 보내는 결과 데이터
- Pydantic을 활용해 JSON 요청/응답을 구조화 및 유효성 검사 가능
response_model
과Field
,validator
로 응답 구조와 제약조건을 명시할 수 있음
다음 강의에서는 Pydantic을 더 깊이 활용한 고급 데이터 유효성 검사 기법을 다룹니다.
📌 참고: 본 강의는 FastAPI 학습 시리즈 기반으로 제작되었습니다.